﻿using EnqueteMobile.Repository.Base;
using EnqueteMobile.Repository.Database;
using EnqueteMobile.Repository.Database.Model;
using EnqueteMobile.Repository.Database.Model.UserObjects;
using EnqueteMobile.Repository.Database.RepositoriesInterfaces;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EnqueteMobile.Repository.Database.EntityFramework.Repositories
{
    public class CityRepository : Repository<Cidade>, ICityRepository
    {
        private MobilePollUnitOfWork unitOfWork;

        public CityRepository(MobilePollContext context) : base(context)
        {
            unitOfWork = new MobilePollUnitOfWork();
        }

        public List<Cidade> GetCidadePorEstado(int idEstado)
        {
            /*
            SqlParameter[] queryParameters = new SqlParameter[]
            {
                 new SqlParameter("id_estado", idEstado)
            };

            String SqlQuery = @"
                select C.Id as Id,
                       C.Nome as Nome,
                       U.Id as IdEstado,
                       U.Nome as NomeEstado
                from Cidade C,
                     UnidadeFederativa U
                where U.Id = C.UnidadeFederativa
                      and U.Id = @id_estado";

            List<CidadeBO> lista_cidade = this.context.Database.SqlQuery<CidadeBO>(SqlQuery, queryParameters).ToList();
            return lista_cidade;
             */
            return entity.Where(c => c.UnidadeFederativa == idEstado).ToList();
        }

        public Cidade GetCidadePorNome(string nome)
        {
            return entity.Where(c => c.Nome.Equals(nome)).FirstOrDefault();
        }


        public Cidade Insert(Cidade cidade)
        {
            return entity.Add(cidade);
        }

        public Cidade Insert(string nome, string siglaUf)
        {
            UnidadeFederativa uf = this.unitOfWork.FederalUnitRepository.GetBySigla(siglaUf);
            if(uf == null)
            {
                uf = unitOfWork.FederalUnitRepository.Insert("", siglaUf);
                unitOfWork.Commit();
            }

            Cidade cidade = new Cidade();
            cidade.Nome = nome;
            cidade.UnidadeFederativa = uf.Id;

            Cidade newCidade = entity.Add(cidade);

            return newCidade;
        }


        public new Cidade Update(Cidade cidade)
        {
            throw new NotImplementedException();
        }
    }
}